package ao.com.bna.beans;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="PROCESSO")
public class Processo implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@Id
	@SequenceGenerator(name="ID_PROCESSO_GENERATOR", sequenceName="PROCESSO_SEQ", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ID_PROCESSO_GENERATOR")
	
	@Column(nullable = false, precision = 6)
	private Long idProcesso;
	
	@ManyToOne
	@JoinColumn(name = "IDPROCESSOESTADO", referencedColumnName = "IDPROCESSOESTADO")
	private ProcessoEstado processoEstado = new ProcessoEstado();
	
	@ManyToOne
	@JoinColumn(name = "IDTRANSGRESSOR", referencedColumnName = "IDTRANSGRESSOR")
	private Transgressor transgressor = new Transgressor();

	@ManyToOne
	@JoinColumn(name = "IDTIPOMOEDA", referencedColumnName = "IDTIPOMOEDA")
	private TipoMoeda tipoMoeda = new TipoMoeda();
	
	@ManyToOne
	@JoinColumn(name = "IDTIPONOTIFICACAO", referencedColumnName = "IDTIPONOTIFICACAO")
	private TipoNotificacao tipoNotificacao = new TipoNotificacao() ;
	
	@OneToMany(mappedBy = "processo")
    private Collection<Recurso> recursoCollection;
	
	@Temporal(TemporalType.DATE)
	private Date dataDeApreensao;
	
	@Column(scale=2,precision=12)
	private BigDecimal montante;
	
	@Column(length=20)
	private String numOficio;
	
	@Temporal(TemporalType.DATE)
	private Date dataAberturaProcesso;
	
	@Temporal(TemporalType.DATE)
	private Date dataEntregaNotificacao;

	public Date getDataEntregaNotificacao() {
		return dataEntregaNotificacao;
	}

	public void setDataEntregaNotificacao(Date dataEntregaNotificacao) {
		this.dataEntregaNotificacao = dataEntregaNotificacao;
	}

	public Long getIdProcesso() {
		return idProcesso;
	}

	public void setIdProcesso(Long idProcesso) {
		this.idProcesso = idProcesso;
	}

	public ProcessoEstado getProcessoEstado() {
		return processoEstado;
	}

	public void setProcessoEstado(ProcessoEstado processoEstado) {
		this.processoEstado = processoEstado;
	}

	public Date getDataDeApreensao() {
		return dataDeApreensao;
	}

	public void setDataDeApreensao(Date dataDeApreensao) {
		this.dataDeApreensao = dataDeApreensao;
	}

	public BigDecimal getMontante() {
		return montante;
	}

	public void setMontante(BigDecimal montante) {
		this.montante = montante;
	}

	public String getNumOficio() {
		return numOficio;
	}

	public void setNumOficio(String numOficio) {
		this.numOficio = numOficio;
	}

	public Date getDataAberturaProcesso() {
		return dataAberturaProcesso;
	}

	public void setDataAberturaProcesso(Date dataAberturaProcesso) {
		this.dataAberturaProcesso = dataAberturaProcesso;
	}
	
	

	public Transgressor getTransgressor() {
		return transgressor;
	}

	public void setTransgressor(Transgressor transgressor) {
		this.transgressor = transgressor;
	}

	public TipoMoeda getTipoMoeda() {
		return tipoMoeda;
	}

	public void setTipoMoeda(TipoMoeda tipoMoeda) {
		this.tipoMoeda = tipoMoeda;
	}

	public TipoNotificacao getTipoNotificacao() {
		return tipoNotificacao;
	}

	public void setTipoNotificacao(TipoNotificacao tipoNotificacao) {
		this.tipoNotificacao = tipoNotificacao;
	}

	
	
	public Collection<Recurso> getRecursoCollection() {
		return recursoCollection;
	}

	public void setRecursoCollection(Collection<Recurso> recursoCollection) {
		this.recursoCollection = recursoCollection;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idProcesso == null) ? 0 : idProcesso.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Processo other = (Processo) obj;
		if (idProcesso == null) {
			if (other.idProcesso != null)
				return false;
		} else if (!idProcesso.equals(other.idProcesso))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Processo [idProcesso=" + idProcesso + "]";
	}
	
	
	
}
